export default {
   namespaced: true,
    state:() =>({
      // cart: JSON.parse(uni.getStorageSync('cart') || '[]') ,
      cart: JSON.parse(uni.getStorageSync('cart') || '[]')
    }) ,

  // 模块的 mutations 方法
  mutations: {
    // 点击购物车,添加商品
    addShop(state,goods) {
      // 根据提交的商品的Id，查询购物车中是否存在这件商品
      //如果找不到 就是underfind,找到返回商品
      const data = state.cart.find((x) => {
        return x.goods_id === goods.goods_id})
      // 如果没有id,就添加商品
      if(!data) {
        state.cart.push(goods)
      } else {
        // 如果有 就让数量加1
       data.goods_count++
      }
      // 调用 moduleCart 下的saveToStorage 方法
      this.commit('moduleCart/saveToStorage')
    },
    // 持久化储存数据
    saveToStorage(state) {
       uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    // 修改商品的选中状态
    updateGoodsState(state,newState){
      // 找到对应的id
      const shopId = state.cart.find(x => x.goods_id === newState.goods_id)
      // 判断id 是否存在
      if(shopId) {
        // 存在,更改他的勾选状态
        shopId.goods_state = newState.goods_state
        // 持久化保存
          this.commit('moduleCart/saveToStorage')
      }
    },
   // 更新购物车中商品的数量
   updateGoodsCount(state, goods) {
     // 根据 goods_id 查询购物车中对应商品的信息对象
     const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
     if(findResult) {
       // 更新对应商品的数量
       findResult.goods_count = goods.goods_count
       // 持久化存储到本地
       this.commit('moduleCart/saveToStorage')
     }
   },
   // 删除商品
   removeGoodsById(state,id){
     // 筛选出不删除的数据
     state.cart= state.cart.filter(x => x.goods_id !== id)
     // 把不需删除的数据持久存
       this.commit('moduleCart/saveToStorage')
   },
   // 商品已勾选的的状态
   updateAllGoodsState(state,newState){
      state.cart.forEach(x => x.goods_state=newState)
      this.commit('moduleCart/saveToStorage')
   }
  },

  // 模块的 getters 属性
getters: {
   // 统计购物车中商品的总数量
   total(state) {
     // console.log(state)
      // let c = 0
      // state.cart.forEach(goods => c += goods.goods_count)
      // return c
     return state.cart.reduce((total,val) => total +=val.goods_count,0)
   },
   // 勾选的复选框
   checkedCount(state) {
     // 筛选cart里面 商品的勾选状态 并把他们勾选的商品的个数进行相加
    return state.cart.filter(x=>x.goods_state).reduce((total,item)=>{return total += item.goods_count},0)
   },
   checkedGoodsAmount(state){
     // 筛选出已勾选的商品,并把他们的个数及价格相加,并保留两位小数
    return  state.cart.filter(x => x.goods_state).reduce((total,item) => total += item.goods_price,0).toFixed(2)
   }
}
}